home *** CD-ROM | disk | FTP | other *** search
/ Aminet 39 / Aminet 39 (2000)(Schatztruhe)[!][Oct 2000].iso / Aminet / game / misc / WormWars.lha / wormwars / source / same.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-08-07  |  14.3 KB  |  410 lines

  1. /* $Filename:    WormWars/Source/same.h
  2.  * $VER:         WormWars 6.3
  3.  * $Description: Header file for Worm Wars
  4.  *
  5.  * © Copyright 2000 James R. Jacobs.
  6.  
  7. SAME ON EACH PLATFORM -------------------------------------------------- */
  8.  
  9. #define elif         else if
  10. #define AGLOBAL      ;       /* global (project-scope) */
  11. #define MODULE       static  /* external static (file-scope) */
  12. #define PERSIST      static  /* internal static (function-scope) */
  13. #define AUTO         auto    /* automatic (function-scope) */
  14.  
  15. /* miscellaneous */
  16.  
  17. #define CAUSEWAIT      100
  18. #define DATELENGTH       8 /* DD/MM/YY */
  19. #define TIMELENGTH       5 /* HH:MM */
  20. #define DEFAULTLEVELS    5
  21. #define ENDXPIXEL     ((STARTXPIXEL + SQUAREX * (FIELDX + 1)) - 1)
  22. #define ENDYPIXEL     ((STARTYPIXEL + SQUAREY * (FIELDY + 1)) - 1)
  23. #define FIELDX          52 /* in squares */
  24. #define FIELDY          38 /* in squares */
  25. #define HISCORES         4
  26. #define LIFEMODULO    1000
  27. #define MAXLEVELS       40 /* assert (MAXLEVELS >= 1 && MAXLEVELS <= 99); */
  28. #define NAMELENGTH      21 /* 0..20 are TEXT, 21 is NULL */
  29. #define NOMODE           0
  30. #define NUMKEYS         28
  31. #define PATIENCE        20
  32. #define SAYLIMIT      ((ENDXPIXEL - STARTXPIXEL) / FONTX)
  33. #define VERSION       "$VER: Worm Wars 6.3 (8.8.100)"
  34.  
  35. /* samples */
  36.  
  37. #define FXBORN_DOG        0
  38. #define FXBORN_DRIP       1
  39. #define FXBORN_GOAT       2
  40. #define FXBORN_MISSILE    3
  41. #define FXBORN_ORB        4
  42. #define FXBORN_PENGUIN    5
  43. #define FXBORN_PROTECTOR  6
  44. #define FXDEATH_FRAGMENT  7 // thud
  45. #define FXDEATH_GOAT      8
  46. #define FXDEATH_ORB       9
  47. #define FXDEATH_PENGUIN  10
  48. #define FXDEATH_WORM     11
  49. #define FXDO_BOMB        12 // tick
  50. #define FXDO_ENCLOSE     13
  51. #define FXDO_GOAT        14 // fire
  52. #define FXDO_JUMP        15
  53. #define FXDO_ORB         16 // split
  54. #define FXGET_AMMO       17
  55. #define FXGET_CYCLONE    18
  56. #define FXGET_DRIP       19
  57. #define FXGET_GROWER     20
  58. #define FXGET_OBJECT     21
  59. #define FXGET_NITRO      22
  60. #define FXGET_POWERUP    23
  61. #define FXGET_PULSE      24 // explode
  62. #define FXGET_SKULL      25
  63. #define FXFILENEW        26
  64. #define FXFILEOPEN       27
  65. #define FXFILESAVE       28
  66. #define FXFILESAVEAS     29
  67. #define FXEDITCUT        30
  68. #define FXEDITCOPY       31
  69. #define FXEDITPASTE      32
  70. #define FXEDITDELETE     33
  71. #define FXHELP           34
  72. #define FXUSE_AMMO       35
  73. #define FXUSE_ARMOUR     36
  74. #define FXUSE_BOMB       37
  75. #define FXUSE_TELEPORT   38
  76. #define FXUSE_TONGUE     39
  77. #define FX_C             40
  78. #define FX_O             41
  79. #define FX_M             42
  80. #define FX_P             43
  81. #define FX_L             44
  82. #define FX_E             45
  83. #define FX_T             46
  84. #define FXPAIN           47
  85. #define FXAPPLAUSE       51 // after each new hiscore
  86. #define FXGAMEOVER       52 // if all worms are dead
  87. #define FXCELEBRATE      53 // if game succeeded
  88. #define FXCLICK          54 // rundown, keypresses
  89. #define FXLAUNCH         55 // title screen
  90. #define FXRIFF           56 // after each rundown
  91. #define FXSIREN          57 // out of time
  92. #define SAMPLES          FXSIREN
  93. #define FXCENTRE         FXDEATH_PENGUIN
  94. #define FXDO_CLOUD       FXDO_GOAT
  95. #define FXFX             FXLAUNCH
  96. #define FXRUNDOWN        FXCLICK
  97. #define FXUSE_PROTECTOR  FXBORN_PROTECTOR
  98.  
  99. /* key types */
  100.  
  101. #define MOVE              0 /* not AMMO, TRAINER, ONEHUMAN */
  102. #define TRAINER           2 /* not MOVE, AMMO, ONEHUMAN */
  103. #define ONEHUMAN          3 /* not MOVE, AMMO, TRAINER */
  104.  
  105. /* speeds */
  106.  
  107. #define VERYFAST          1
  108. #define FAST              2
  109. #define NORMAL            4
  110. #define SLOW              8
  111. #define VERYSLOW         16 /* must be non-0 */
  112.  
  113. /* The constant NORMAL is used for several purposes:
  114.     a)    as a speed (therefore must not be VERYFAST, FAST, SLOW
  115.             or VERYSLOW);
  116.     b)    as a blitmode (therefore must not be BLACK or WHITE); and
  117.     c)    as a pointer (therefore must not be GOLD, SILVER, EMPTY,
  118.             WOOD or STONE).
  119.  
  120. stats */
  121.  
  122. #define AMMOLIMIT       100
  123. #define BIASLIMIT       100
  124. #define FREEDOMLIMIT    100
  125. #define STARTLIVES      100
  126. #define LIVESLIMIT      200
  127. #define MODELIMIT       100
  128. #define MULTILIMIT        8 /* don't set >8! */
  129. #define POWERLIMIT        6
  130. #define SCORELIMIT 99999999 // 99 million
  131.  
  132. /* Field values...
  133. These are objects. */
  134.     #define AFFIXER                 0
  135.     #define AMMO                 1
  136.     #define ARMOUR                 2
  137.     #define BIAS                 3
  138.     #define BOMB                 4
  139.     #define BONUS                 5
  140.     #define CLOCK                 6
  141.     #define CONVERTER             7
  142.     #define CUTTER               8
  143.     #define CYCLONE              9
  144.     #define FREEDOM             10
  145.     #define GROWER              11
  146.     #define HEALER              12
  147.     #define ICE                 13
  148.     #define LIFE                14
  149.     #define LIGHTNING           15
  150.     #define MAGNET              16
  151.     #define MISSILE             17
  152.     #define MULTIPLIER          18
  153.     #define NITRO               19
  154.     #define POWER               20
  155.     #define PROTECTOR           21
  156.     #define PULSE               22
  157.     #define PUSHER              23
  158.     #define REMNANTS            24
  159.     #define SIDESHOT            25
  160.     #define SLAYER              26
  161.     #define SLOWER              27
  162.     #define SWITCHER            28
  163.     #define TONGUE              29
  164.     #define TREASURE            30
  165.     #define UMBRELLA            31
  166.     #define LASTOBJECT            UMBRELLA
  167. /* These are `empty'. */
  168.         #define EMPTY                   (LASTOBJECT + 1)
  169.         #define SILVER                  (LASTOBJECT + 2)
  170.         #define GOLD                    (LASTOBJECT + 3)
  171.         #define FIRSTEMPTY              EMPTY
  172.         #define LASTEMPTY               GOLD
  173.     #define LASTGOATFIRE        LASTEMPTY
  174. /* Nothing special about the following... */
  175.         #define TELEPORT                (GOLD + 1)
  176.         #define FRAGMENT                (GOLD + 2)
  177.         #define ORB                     (GOLD + 3)
  178.     #define FIRSTPROTECTOR        (GOLD + 4)
  179.     #define LASTPROTECTOR        (GOLD + 7)
  180. /* Margins indicate `ranges' for:
  181.    n: orb bouncing, normal mode.
  182.    t: orb bouncing, tongue mode.
  183.    a: orb bouncing, armour mode.
  184.    g: goats. */
  185.         #define  GREEN_C                        (GOLD +  8)      
  186.         #define    RED_O                        (GOLD +  9)
  187.         #define   BLUE_M                        (GOLD + 10)
  188.         #define YELLOW_P                        (GOLD + 11)
  189.         #define  GREEN_L                        (GOLD + 12)
  190.         #define    RED_E                        (GOLD + 13)
  191.         #define   BLUE_T                        (GOLD + 14)
  192.         #define YELLOW_E                        (GOLD + 15)
  193.         #define SKULL                           (GOLD + 16)             /* n t a g */
  194.         #define SLIME                           (GOLD + 17)             /*     [ [ */
  195.         #define STONE                           (GOLD + 18)             /* [ [ | | */
  196.         #define GOAT                            (GOLD + 19)             /* ] | | | */
  197.         #define WOOD                            (GOLD + 20)             /*   | ] | */
  198.         #define FIRSTTAIL                       (GOLD + 21)             /*   |   | */
  199.         #define LASTTAIL                        (GOLD + 24)             /*   ]   ] */
  200.         #define FIRSTLETTER        GREEN_C
  201.         #define FIRSTNONE          STONE
  202.         #define FIRSTTONGUE        STONE
  203.         #define FIRSTARMOUR        SLIME
  204.         #define FIRSTGOAT          SLIME
  205.         #define LASTLETTER         YELLOW_E
  206.         #define LASTNONE           LASTTAIL
  207.         #define LASTTONGUE         GOAT
  208.         #define LASTARMOUR         GOAT
  209.         #define LASTGOAT           LASTTAIL
  210.         #define LETTERS            (LASTLETTER - FIRSTLETTER)
  211.  
  212.         #define ORBTONGUE          (LASTTAIL +  1)
  213.         #define ORBARMOUR          (LASTTAIL +  2)
  214.         #define FIRSTFIRE          (LASTTAIL +  3)
  215.         #define LASTFIRE           (LASTTAIL +  6)
  216.         #define FIRSTMISSILE       (LASTTAIL +  7)
  217.         #define LASTMISSILE        (LASTTAIL + 10)
  218.         #define START              (LASTTAIL + 11)
  219.         #define MUSIC              (LASTTAIL + 12)
  220.         #define FX                 (LASTTAIL + 13)
  221.         #define ZERO               (LASTTAIL + 14)
  222.         #define TIMEBOMB            ZERO
  223.         #define ONE                (ZERO + 1)
  224.         #define TWO                (ZERO + 2)
  225.         #define       HEAD         (ZERO + 10)
  226.         #define  GREENHEADUP        HEAD
  227.         #define    REDHEADUP       (HEAD +  1)
  228.         #define   BLUEHEADUP       (HEAD +  2)
  229.         #define YELLOWHEADUP       (HEAD +  3)
  230.         #define  FIRSTHEAD         GREENHEADUP
  231.         #define   LASTHEAD         YELLOWHEADUP
  232.         #define  GREENHEADDOWN     (HEAD +  4)
  233.         #define    REDHEADDOWN     (HEAD +  5)
  234.         #define   BLUEHEADDOWN     (HEAD +  6)
  235.         #define YELLOWHEADDOWN     (HEAD +  7)
  236.         #define  GREENHEADLEFT     (HEAD +  8)
  237.         #define    REDHEADLEFT     (HEAD +  9)
  238.         #define   BLUEHEADLEFT     (HEAD + 10)
  239.         #define YELLOWHEADLEFT     (HEAD + 11)
  240.         #define  GREENHEADRIGHT    (HEAD + 12)
  241.         #define    REDHEADRIGHT    (HEAD + 13)
  242.         #define   BLUEHEADRIGHT    (HEAD + 14)
  243.         #define YELLOWHEADRIGHT    (HEAD + 15)
  244.         #define  GREENMODEUP       (HEAD + 16)
  245.         #define    REDMODEUP       (HEAD + 17)
  246.         #define   BLUEMODEUP       (HEAD + 18)
  247.         #define YELLOWMODEUP       (HEAD + 19)
  248.         #define  GREENMODEDOWN     (HEAD + 20)
  249.         #define    REDMODEDOWN     (HEAD + 21)
  250.         #define   BLUEMODEDOWN     (HEAD + 22)
  251.         #define YELLOWMODEDOWN     (HEAD + 23)
  252.         #define  GREENMODELEFT     (HEAD + 24)
  253.         #define    REDMODELEFT     (HEAD + 25)
  254.         #define   BLUEMODELEFT     (HEAD + 26)
  255.         #define YELLOWMODELEFT     (HEAD + 27)
  256.         #define  GREENMODERIGHT    (HEAD + 28)
  257.         #define    REDMODERIGHT    (HEAD + 29)
  258.         #define   BLUEMODERIGHT    (HEAD + 30)
  259.         #define YELLOWMODERIGHT    (HEAD + 31)
  260.         #define METAL              (HEAD + 32)
  261.         #define FIRSTDRIP          (HEAD + 33)
  262.         #define DRIP               FIRSTDRIP
  263.         #define LASTDRIP           (HEAD + 36)
  264.         #define BLACKENED          (HEAD + 37)
  265.         #define WHITENED           (HEAD + 38)
  266.         #define PENGUIN            (HEAD + 39)
  267.         #define WHIRLWIND          (HEAD + 40)
  268.         #define DOG                (HEAD + 41) /* dog chasing */
  269.         #define DOGAWAKENING       (HEAD + 42)
  270.         #define DOGDORMANT         (HEAD + 43)
  271.         #define CLOUD              (HEAD + 44)
  272.         #define ARRAYSIZE          CLOUD
  273.  
  274.         #define ANYTHING           STONE // should be something that is valid field contents
  275.  
  276. /* These have no imagery. */
  277.     #define TEMPTAIL            (ARRAYSIZE + 1)
  278.     #define TEMPWOOD            TEMPTAIL
  279.     #define TEMPSLIME            TEMPTAIL
  280.         #define TEMPLIGHTNING                   TEMPTAIL
  281.     #define TEMPSILVER            (ARRAYSIZE + 2)
  282.     #define TEMPGOLD            (ARRAYSIZE + 3)
  283.     #define NOSQUARE            (ARRAYSIZE + 4)
  284.  
  285. /* game status
  286.  */
  287.  
  288. #define GAMEOVER        0
  289. #define PLAYGAME        1
  290. #define FIELDEDIT       2
  291. #define TITLESCREEN     3
  292.  
  293. /* indicator locations */
  294.  
  295. #define CAUSEYDISTANCE  2 /* distance from centre for cause */
  296. #define LETTERYDISTANCE 3 /* distance from centre for letters */
  297. #define ICONY           (FIELDY / 2)
  298. #define MUSICICON       (FIELDX + 2)
  299. #define CLOCKICON       (FIELDX + 3)
  300.  
  301. /* control values */
  302.  
  303. #define NONE            0 /* must be 0
  304.  */
  305. #define AMIGA           1
  306. #define HUMAN           2
  307. #define IBMPC           AMIGA
  308.  
  309. /* PROTOTYPES -------------------------------------------------------------
  310.  
  311. You could put AGLOBAL in front of these if you wanted to.
  312.  
  313. engine.c */
  314.  
  315. void clearhiscores(void);
  316. void enginesetup(void);
  317. void gameloop(void);
  318. void levelappend(void);
  319. void leveldelete(void);
  320. void levelerase(void);
  321. void levelinsert(void);
  322. void matchteleports(void);
  323. void newfields(void);
  324. void newgame(void);
  325. void timeloop(void);
  326.  
  327. void align(STRPTR string, SBYTE size, TEXT filler);
  328. AGLOBAL void drawhead(SBYTE player, SBYTE x, SBYTE y);
  329. AGLOBAL void drawsquare(SBYTE x, SBYTE y);
  330. void fillfield(SBYTE which);
  331. void icon(SBYTE player, UBYTE image);
  332. void saylevel(COLOUR colour);
  333. void setbrush(SBYTE newbrush);
  334. void train(SCANCODE scancode);
  335. void updatesquare(SBYTE x, SBYTE y);
  336. void wormqueue(SBYTE player, SBYTE deltax, SBYTE deltay);
  337. void wormscore(SBYTE player, LONG score);
  338.  
  339. SBYTE loadfields(STRPTR pathname);
  340. SBYTE partner(SBYTE which);
  341. ABOOL savefields(STRPTR pathname);
  342. SBYTE valid(SBYTE x, SBYTE y);
  343. SBYTE xwrap(SBYTE x);
  344. SBYTE ywrap(SBYTE y);
  345.  
  346. /* system.c */
  347.  
  348. void celebrate(void);
  349. void clearjoystick(void);
  350. void clearkybd(void);
  351. void clearscreen(void);
  352. void datestamp(void);
  353. void gameinput(void);
  354. void hiscores(void);
  355. void joy0(void);
  356. void resettime(void);
  357. void sendreadrequest(void);
  358. void systemsetup(void);
  359. void timing(void);
  360. void titlescreen(void);
  361. void turborender(void);
  362. void waitasec(void);
  363.  
  364. void cleanexit(SLONG rc);
  365. void draw(SBYTE x, SBYTE y, UBYTE image);
  366. void effect(SBYTE index);
  367. void fileopen(ABOOL revert);
  368. void filesaveas(ABOOL flag);
  369. void flash(ULONG where);
  370. void rundown(SBYTE player);
  371. void say(STRPTR sentence, COLOUR colour);
  372. void stat(SBYTE player, SBYTE line);
  373. void stopfx(void);
  374.  
  375. ABOOL anykey(ABOOL timeout);
  376. ABOOL verify(void);
  377. ABOOL ZOpen(STRPTR fieldname, ABOOL write);
  378. ABOOL ZRead(STRPTR IOBuffer, ULONG length);
  379. ABOOL ZWrite(STRPTR IOBuffer, ULONG length);
  380. ABOOL ZClose(void);
  381.  
  382. /* PUBLIC STRUCTURES ------------------------------------------------------ */
  383.  
  384. struct HiScoreStruct
  385. {   SBYTE player, level;
  386.     SLONG score;                /* the score itself */
  387.     TEXT  name[NAMELENGTH + 2];    /* name of the player */
  388.     ABOOL fresh;                /* is the entry new? */
  389.     TEXT  date[DATELENGTH + 1],    /* date of achievement */
  390.           time[TIMELENGTH + 1];    /* time of achievement */
  391. };
  392. struct TeleportStruct
  393. {   SBYTE x, y;
  394.     ABOOL alive;
  395. };
  396. struct WormStruct
  397. {   SBYTE  x, y, deltax, deltay, position, posidir, victor, cause,
  398.            statx, staty, pos, multi, power, mode, last, levelreached;
  399.     ABOOL  affixer, remnants, alive, moved, nitro, pusher,
  400.            sideshot, flashed, rammed;
  401.     UBYTE  speed, control;
  402.     SWORD  armour, tongue, ammo, bias, cutter, ice, lives, freedom;
  403.     SLONG  score, oldscore, hiscore;
  404.     ULONG  causewait;
  405.     TEXT   name[NAMELENGTH + 1];
  406.     COLOUR colour;
  407. };
  408.  
  409. /* Must have blank line at EOF. */
  410.